package com.cyh.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cyh.Utils.R;
import com.cyh.pojo.User;
import com.cyh.service.UserService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author cyh
 * @since 2022-06-06
 */
@RestController
@RequestMapping("/user")
@CrossOrigin    //解决跨域
public class UserController {

    @Autowired
    private UserService userService;

    //登录方法(模拟登录，后期使用权限框架Spring security来做)
    @PostMapping("login")
    public R login() {
        return R.ok().data("token", "admin");
    }

    //模拟信息返回
    @GetMapping("info")
    public R info() {
        return R.ok().data("roles", "[admin]").data("name", "admin").data("avatar", "https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif");
    }

    /*查询所有用户信息*/
    @PostMapping("pageUser/{current}/{limit}")
    @ApiOperation("多条件查询带分页")
    public R pageUserCondition(@PathVariable("current") Long current,
                               @PathVariable("limit") Long limit,
                               @RequestBody(required = false) User user) {
        //创建Page对象
        Page<User> pageUser = new Page<>(current, limit);
        //构建条件
        QueryWrapper<User> wrapper = new QueryWrapper<>();

        {
            //多条件查询
            String username = user.getUsername();
            String nickname = user.getNickname();
            // 判断条件是否为空，如果不为空则拼接条件
            if (!StringUtils.isEmpty(username)) {
                wrapper.like("username", username);
            }
            if (!StringUtils.isEmpty(nickname)) {
                wrapper.like("nickname", nickname);
            }
        }
        wrapper.orderByDesc("id");
        //调用方法实现条件查询分页
        userService.page(pageUser, wrapper);
        long total = pageUser.getTotal();//获取总记录条数
        List<User> records = pageUser.getRecords();//获取分页的数据
        return R.ok().data("total", total).data("rows", records);
    }

    /*删除用户信息*/
    @DeleteMapping("deleteUser/{id}")
    public R deleteUser(@PathVariable Integer id) {
        boolean flag = userService.removeById(id);
        if (flag) {
            return R.ok();
        } else {
            return R.error().message("删除失败");
        }
    }

    /*添加用户信息*/
    @PostMapping("addUser")
    @ApiOperation("添加用户")
    public R addTeacher(@RequestBody User user) {
        boolean flag = userService.save(user);
        if (flag) {
            return R.ok();
        } else {
            return R.error();
        }
    }

    /*修改用户信息功能*/
    //根据用户id进行查询
    @GetMapping("getUser/{id}")
    @ApiOperation("根据id进行查询")
    public R getUserById(@PathVariable("id") String id) {
        User user = userService.getById(id);
        return R.ok().data("user", user);
    }

    //updateById所传的对象之中必须含有id属性
    @PostMapping("updateUser")
    @ApiOperation("修改用户")
    public R updateUser(@RequestBody User user) {
        boolean flag = userService.updateById(user);//通过id来修改，该对象中含有id
        if (flag) {
            return R.ok();
        } else {
            return R.error();
        }
    }
}

